/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ik.pbs.Manejadores;

/**
 *
 * @author alexis
 */
import com.ik.pbs.Encapsulados.PerfilUsuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class ManejadorPerfilUsuario {

    public static ManejadorPerfilUsuario manager = null;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD");
    private SimpleDateFormat shf = new SimpleDateFormat("HH:mm:ss");

    public static ManejadorPerfilUsuario getInstance() {
        if (manager == null) {
            manager = new ManejadorPerfilUsuario();
        }

        return manager;
    }

    public void ManejadorPerfilUsuario() {
    }

    public ArrayList<PerfilUsuario> getPerfilUsuarios(Connection con) {
        ArrayList<PerfilUsuario> arregloPerfilUsuario = new ArrayList();

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from perfilusuario order by id";

        try {
            state = con.prepareCall(query);
            rd = state.executeQuery();

            while (rd.next()) {

                PerfilUsuario PerfilUsuario = new PerfilUsuario();

                PerfilUsuario.setId(rd.getInt("id"));
                PerfilUsuario.setUsuarios_id(ManejadorUsuarios.getInstance().getUsuario(con, rd.getInt("usuarios_id")));
                PerfilUsuario.setNombrecompleto(rd.getString("nombrecompleto"));
                PerfilUsuario.setFechanacimiento(rd.getString("fechanacimiento"));
                PerfilUsuario.setGenero(ManejadorGeneroPerfil.getInstance().getGeneroPerfil(con, rd.getInt("genero")));
                PerfilUsuario.setTelefono(rd.getString("telefono"));
                PerfilUsuario.setCelular(rd.getString("celular"));
                PerfilUsuario.setCorreo(rd.getString("correo"));
                PerfilUsuario.setCiudad_id(ManejadorCiudad.getInstance().getCiudad(con, rd.getInt("ciudad_id")));
                PerfilUsuario.setProfecion(ManejadorProfecion.getInstance().getProfecion(con, rd.getInt("profecion")));
                PerfilUsuario.setCompañia(rd.getString("compania"));
                PerfilUsuario.setFechaInicioLaboral(rd.getString("fechaInicioLaboral"));
                PerfilUsuario.setPuesto(rd.getString("puesto"));
                PerfilUsuario.setFechaingreso(rd.getString("fechaingreso"));
                PerfilUsuario.setNota(rd.getString("nota"));
                PerfilUsuario.setFoto(rd.getString("foto"));


                arregloPerfilUsuario.add(PerfilUsuario);
            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al tomar los perfilusuario!", "Error",
                    JOptionPane.WARNING_MESSAGE);
        }

        return arregloPerfilUsuario;
    }
    public PerfilUsuario getPerfilUsuarioPorUsuario(Connection con, int codigo) {
        PerfilUsuario PerfilUsuario = null;

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from perfilusuario where usuarios_id = ?";

        try {
            state = con.prepareCall(query);
            state.setInt(1, codigo);
            rd = state.executeQuery();

            while (rd.next()) {

                PerfilUsuario = new PerfilUsuario();
                PerfilUsuario.setId(rd.getInt("id"));
                PerfilUsuario.setUsuarios_id(ManejadorUsuarios.getInstance().getUsuario(con, rd.getInt("usuarios_id")));
                PerfilUsuario.setNombrecompleto(rd.getString("nombrecompleto"));
                PerfilUsuario.setFechanacimiento(rd.getString("fechanacimiento"));
                PerfilUsuario.setGenero(ManejadorGeneroPerfil.getInstance().getGeneroPerfil(con, rd.getInt("genero")));
                PerfilUsuario.setTelefono(rd.getString("telefono"));
                PerfilUsuario.setCelular(rd.getString("celular"));
                PerfilUsuario.setCorreo(rd.getString("correo"));
                PerfilUsuario.setCiudad_id(ManejadorCiudad.getInstance().getCiudad(con, rd.getInt("ciudad_id")));
                PerfilUsuario.setProfecion(ManejadorProfecion.getInstance().getProfecion(con, rd.getInt("profecion")));
                PerfilUsuario.setCompañia(rd.getString("compania"));
                PerfilUsuario.setFechaInicioLaboral(rd.getString("fechaInicioLaboral"));
                PerfilUsuario.setPuesto(rd.getString("puesto"));
                PerfilUsuario.setFechaingreso(rd.getString("fechaingreso"));
                PerfilUsuario.setNota(rd.getString("nota"));
                PerfilUsuario.setFoto(rd.getString("foto"));
            }

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }

        return PerfilUsuario;
    }
    
    public PerfilUsuario getPerfilUsuarioPorCorreo(Connection con, String correo) {
        PerfilUsuario PerfilUsuario = null;

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from perfilusuario where correo = ?";

        try {
            state = con.prepareCall(query);
            state.setString(1, correo);
            rd = state.executeQuery();

            while (rd.next()) {

                PerfilUsuario = new PerfilUsuario();
                PerfilUsuario.setId(rd.getInt("id"));
                PerfilUsuario.setUsuarios_id(ManejadorUsuarios.getInstance().getUsuario(con, rd.getInt("usuarios_id")));
                PerfilUsuario.setNombrecompleto(rd.getString("nombrecompleto"));
                PerfilUsuario.setFechanacimiento(rd.getString("fechanacimiento"));
                PerfilUsuario.setGenero(ManejadorGeneroPerfil.getInstance().getGeneroPerfil(con, rd.getInt("genero")));
                PerfilUsuario.setTelefono(rd.getString("telefono"));
                PerfilUsuario.setCelular(rd.getString("celular"));
                PerfilUsuario.setCorreo(rd.getString("correo"));
                PerfilUsuario.setCiudad_id(ManejadorCiudad.getInstance().getCiudad(con, rd.getInt("ciudad_id")));
                PerfilUsuario.setProfecion(ManejadorProfecion.getInstance().getProfecion(con, rd.getInt("profecion")));
                PerfilUsuario.setCompañia(rd.getString("compania"));
                PerfilUsuario.setFechaInicioLaboral(rd.getString("fechaInicioLaboral"));
                PerfilUsuario.setPuesto(rd.getString("puesto"));
                PerfilUsuario.setFechaingreso(rd.getString("fechaingreso"));
                PerfilUsuario.setNota(rd.getString("nota"));
                PerfilUsuario.setFoto(rd.getString("foto"));
            }

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }

        return PerfilUsuario;
    }
    
    public PerfilUsuario getPerfilUsuario(Connection con, int codigo) {
        PerfilUsuario PerfilUsuario = null;

        ResultSet rd = null;
        PreparedStatement state;

        String query = "select * from perfilusuario where id = ?";

        try {
            state = con.prepareCall(query);
            state.setInt(1, codigo);
            rd = state.executeQuery();

            while (rd.next()) {

                PerfilUsuario = new PerfilUsuario();
                PerfilUsuario.setId(rd.getInt("id"));
                PerfilUsuario.setUsuarios_id(ManejadorUsuarios.getInstance().getUsuario(con, rd.getInt("usuarios_id")));
                PerfilUsuario.setNombrecompleto(rd.getString("nombrecompleto"));
                PerfilUsuario.setFechanacimiento(rd.getString("fechanacimiento"));
                PerfilUsuario.setGenero(ManejadorGeneroPerfil.getInstance().getGeneroPerfil(con, rd.getInt("genero")));
                PerfilUsuario.setTelefono(rd.getString("telefono"));
                PerfilUsuario.setCelular(rd.getString("celular"));
                PerfilUsuario.setCorreo(rd.getString("correo"));
                PerfilUsuario.setCiudad_id(ManejadorCiudad.getInstance().getCiudad(con, rd.getInt("ciudad_id")));
                PerfilUsuario.setProfecion(ManejadorProfecion.getInstance().getProfecion(con, rd.getInt("profecion")));
                PerfilUsuario.setCompañia(rd.getString("compania"));
                PerfilUsuario.setFechaInicioLaboral(rd.getString("fechainiciolaboral"));
                PerfilUsuario.setPuesto(rd.getString("puesto"));
                PerfilUsuario.setFechaingreso(rd.getString("fechaingreso"));
                PerfilUsuario.setNota(rd.getString("nota"));
                PerfilUsuario.setFoto(rd.getString("foto"));
            }

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }

        return PerfilUsuario;
    }

    public boolean insertarPerfilUsuario(Connection con, PerfilUsuario PerfilUsuario) {
        PreparedStatement state;

        String query = "insert into perfilusuario values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {


            state = con.prepareStatement(query);
            state.setInt(1, PerfilUsuario.getId());
            state.setInt(2, PerfilUsuario.getUsuarios_id().getId());
            state.setString(3, PerfilUsuario.getNombrecompleto());
            state.setString(4, PerfilUsuario.getFechanacimiento());
            state.setInt(5, PerfilUsuario.getGenero().getId());
            state.setString(6, PerfilUsuario.getTelefono());
            state.setString(7, PerfilUsuario.getCelular());
            state.setString(8, PerfilUsuario.getCorreo());
            state.setInt(9, PerfilUsuario.getCiudad_id().getId());
            state.setInt(10, PerfilUsuario.getProfecion().getId());
            state.setString(11, PerfilUsuario.getCompañia());
            state.setString(12, PerfilUsuario.getFechaInicioLaboral());
            state.setString(13, PerfilUsuario.getPuesto());
            state.setString(14, PerfilUsuario.getFechaingreso());
            state.setString(15, PerfilUsuario.getNota());
            state.setString(16,PerfilUsuario.getFoto());



            state.execute();
            return true;
        } catch (SQLException ex) {
            System.out.println(ex.getCause());
            return actualizarPerfilUsuario(con, PerfilUsuario);
        }


    }

    public boolean actualizarPerfilUsuario(Connection con, PerfilUsuario PerfilUsuario) {
        PreparedStatement state;

        String query = "update PerfilUsuario set usuarios_id = ?,nombrecompleto = ?,fechanacimiento = ?,genero = ?,telefono = ?,celular = ?,correo = ?,ciudad_id = ?,profecion = ?,compania = ?,"
                + "fechaInicioLaboral = ?,puesto = ?,fechaingreso = ?,nota = ?, foto=? where id = ?";

        try {
             state = con.prepareStatement(query);
            state.setInt(16, PerfilUsuario.getId());
            state.setInt(1, PerfilUsuario.getUsuarios_id().getId());
            state.setString(2, PerfilUsuario.getNombrecompleto());
            state.setString(3, PerfilUsuario.getFechanacimiento());
            state.setInt(4, PerfilUsuario.getGenero().getId());
            state.setString(5, PerfilUsuario.getTelefono());
            state.setString(6, PerfilUsuario.getCelular());
            state.setString(7, PerfilUsuario.getCorreo());
            state.setInt(8, PerfilUsuario.getCiudad_id().getId());
            state.setInt(9, PerfilUsuario.getProfecion().getId());
            state.setString(10, PerfilUsuario.getCompañia());
            state.setString(11, PerfilUsuario.getFechaInicioLaboral());
            state.setString(12, PerfilUsuario.getPuesto());
            state.setString(13, PerfilUsuario.getFechaingreso());
            state.setString(14, PerfilUsuario.getNota());
            state.setString(15,PerfilUsuario.getFoto());

            state.execute();
            return true;

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return false;
        }


    }

    public int getNext(Connection con) {
        try {
            ResultSet rd = null;
            PreparedStatement state;
            String query = "select max(id) as max from perfilusuario";

            state = con.prepareStatement(query);
            rd = state.executeQuery();

            if (!rd.next()) {
                return 1;
            } else {
                return (rd.getInt("max") + 1);
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return 0;
    }
}
